#include <iostream>
#include <string>
#include <cstdio>
#include <string.h>
#include <errno.h>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>


using namespace std;



// 测试非阻塞
int main()
{
    pid_t id = fork();
    if(id==0)
    {
        while(true)
        {
            printf("i am sub process:%d\n",getpid());
            sleep(1);
        }
        exit(0);
    }
    
    while(true)
    {
        sleep(1);
        pid_t rid = waitpid(id,NULL,WNOHANG);
        if(rid>0)
        {
            printf("waiting sub process %d sucess\n",rid);
            break;
        }
        else if(rid < 0)
        {
            printf("waiting sub process %d fail\n",rid);
            break;
        }
        else 
        {
            printf("sub process not end\n");
        }

    }

    return 0;
}








// 测试阻塞
//int main()
//{
//    pid_t id = fork();
//    if(id==0)
//    {
//        // child
//        int cnt = 0;
//        while(cnt<5)
//        {
//            printf("sub process:%d\n",getpid());
//            sleep(1);
//            cnt++;
//        }
//        sleep(5);
//        exit(123);
//    }
//    else 
//    {
//        //parent
//        while(true)
//        {
//            int status = 0;
//            printf("father process:%d\n",getppid());
//            pid_t rpid = waitpid(id,&status,0);
//            if(rpid>0)
//            {
//                if(WIFEXITED(status))
//                {
//                    printf("wait sub process sucess,rid:%d,status code:%d\n",rpid,WEXITSTATUS(status));
//                }
//                else 
//                {
//                    printf("child process quit error\n");
//                }
//            }
//            sleep(2);
//        }
//
//    }
//
//    return 0;
//}
